#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>  //调试使用

#include <QMenu>
#include <QMenuBar>
#include <QAction>
#include <QDebug>
#include <QToolBar>
#include <QPushButton>
#include <QStatusBar>
#include <QLabel>
#include <QTextStream>
#include <QFile>
#include <QFileDialog>
#include <QIcon>

#include <QSqlDatabase>
#include <QMessageBox>
#include <QSqlError>    //操作数据需要引入的有文件
#include  <QSqlTableModel>
#include <QSqlRecord>
#include <QSqlQuery>

#include <QStatusBar> //状态栏显示

#include <QComboBox>
#include <QSqlQuery>   //主要是对数据库操作
#include <QLineEdit>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("QT查询数据应用"); //设置应用的标题

    //菜单栏
    QMenuBar *mBar =menuBar();  //创建菜单栏指针

    //添加菜单栏
    QMenu *pFile = mBar->addMenu("文件");

    //添加菜单项 添加动作
    QAction  *pOpen = pFile->addAction("打开文件");

    pFile->addSeparator(); //添加分割线

    QAction *pClose = pFile->addAction("关闭文件");

    connect(pClose,&QAction::triggered,this,&MainWindow::close); //关闭应用

    connect(pOpen,&QAction::triggered,this,&MainWindow::MySlot); //打开应用

    //工具栏  菜单项的快捷方式
    QToolBar *toolBar = addToolBar("toolBar");

    toolBar->addAction(pOpen);

    //QPushButton *b = new QPushButton(this);

    //b->setText("关闭文件");
    toolBar->addAction(pClose); //关闭文件操作

    connect(pClose,&QAction::triggered,this,&MainWindow::close);

    //
    QStatusBar *sBar = statusBar();
    QLabel *label = new QLabel();
    label->setText("formal txt");
    sBar->addWidget(label);

    //打印Qt支持的数据库驱动
    qDebug()<<QSqlDatabase::drivers();

    //添加Mysql数据库

   QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

   db.setHostName("localhost");   //设置宿主名为localhost
   db.setUserName("root");  //数据库用户名
   db.setPort(3306);  //端口号
   db.setPassword("123456");//数据库密码
   db.setDatabaseName("info"); //使用哪一个数据库

   if(!db.open())//数据库打开失败
   {
       QMessageBox::warning(this,"错误",db.lastError().text());
       //qDebug()<<"连接失败"<<"connect to mysql errror"<<db.lastError();
       return;
   }
   else
   {
       qDebug()<<"连接成功"<<"connect to mysql ok";
       //QMessageBox::information(this,"连接","数据库连接成功");
   }

}
//自定义槽函数
void MainWindow::MySlot()
{
    //设置过滤条件
    QString path = QFileDialog::getOpenFileName(this, "open","../","souce(*.cpp,*.h);;(*.xls,*.csv);;(*.*)");
    if(false ==  path.isEmpty())
    {
        QFile file;
        file.setFileName(path);

        bool isOk = file.open(QIODevice::ReadWrite);
        if(true == isOk)
        {
            QTextStream stream(&file);

            stream.setCodec("gbk");//设置编码方式  gbk  UTF-8
            QString str = stream.readAll();
            //ui->tableView->showRow(1);
        }
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_buttonAdd_clicked()
{
    QSqlRecord record = model->record();

    int row = model->rowCount();

    model->insertRecord(row,record);

}

void MainWindow::on_buttonSure_clicked()
{
    model->submitAll(); //提交任务
}
void MainWindow::on_buttonCancel_clicked()
{
    model->revertAll();//取消全部任务
    model->submitAll();//提交任务
}

void MainWindow::on_buttonDel_clicked()
{
    //获取选中的模型
    QItemSelectionModel *sModel = ui->tableView->selectionModel();
    //取出模型中的索引

    QModelIndexList list = sModel->selectedRows();
    //删除所选中的行
    for(int i=0;i<list.size();i++)
    {
        model->removeRow(list.at(i).row());
    }
    int ok = QMessageBox::warning(this,tr("删除"),tr("你确定"
    "删除当前行吗？"),
    QMessageBox::Yes,QMessageBox::No);
    if(ok == QMessageBox::Yes)
    {
      model->submitAll();//如果不删除，则撤销
    }
    else
      model->revertAll(); //否则提交，在数据库中删除该行
}


void MainWindow::on_buttonFind_clicked()
{
    QString time = ui->lineEdit->text();
    QString str = QString("time= '%1'").arg(time);

    //设置查询的过滤条件(time)
    model->setFilter(str);
}

void MainWindow::on_buttonFind_2_clicked()
{
    QString data = ui->lineEdit_2->text();
    QString str1 = QString("data= '%1'").arg(data);

    //设置查询的过滤条件(time)
    model->setFilter(str1);
}


void MainWindow::on_buttonFind_3_clicked()
{

     model = new QSqlTableModel(this); //设置模型
     model->setTable("student"); //选择使用哪一个数据表
     //把model放在view中
     ui->tableView->setModel(model);

     model->setEditStrategy(QSqlTableModel::OnManualSubmit);//设置数据库手动编辑模式
     //显示model里面的数据
     model->select();
     //修改数据库对应的字段名
     model->setHeaderData(0,Qt::Horizontal,"帧ID");
     model->setHeaderData(1,Qt::Horizontal,"帧格式");
     model->setHeaderData(2,Qt::Horizontal,"帧长度");
     model->setHeaderData(3,Qt::Horizontal,"帧类型");
     model->setHeaderData(4,Qt::Horizontal,"CAN数据");
     model->setHeaderData(5,Qt::Horizontal,"时间(ms)");
}
